package dao;
//1
/*专门针对学生表的数据库访问对象（每一个对象都创建一个对应的dao*/

import model.Classes;
import model.Student;
import utils.DBUtil;

import java.sql.*;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.List;

//4 根据班级去查学生信息-》一个查询里面有两个表的数据怎么办-》一行记录怎么关联两个对象：在某一类里面加一个属性就行
public class StudentDao {
    //新增、更改、删除、查询等等都写成方法

    //按班级名来查询班级里所有的同学信息
    public List<Student> selectByClassName(String className){//命名即注释
        //校验参数
        if(className==null||className.isEmpty()){
            System.out.println("班级名为空，请重新输入");
            return null;
        }

        //声明对象
        Connection connection=null;
        PreparedStatement statement=null;
        ResultSet resultSet=null;

        try {
            connection=DBUtil.getConnection();
            String sql="select s.id,s.name,s.sno,s.age,s.gender,s.enrool_date,s.class_id,c.id c_id,c.'name'"+
            "c_name from student s,class c where s.class_id=c.id and c.name=?";
            //获取SQL预处理对象，并完成占位符的替换
            statement=connection.prepareStatement(sql);
            statement.setString(1,className);
            //执行sql并获取结果集
            resultSet=statement.executeQuery();
            //遍历结果集，把解析出来的对象添加到一个集合里
            List<Student> list=null;
            while(resultSet.next()){
                //依次获取列的值
                long id = resultSet.getLong("id");
                String name = resultSet.getString("name");
                String sno = resultSet.getString("sno");
                int age = resultSet.getInt("age");
                boolean gender = resultSet.getBoolean("gender");
                Date enroll_date = resultSet.getDate("enroll_date");
                long class_id = resultSet.getLong("class_id");
                long cId= resultSet.getLong("c_id");
                String cName=resultSet.getString("c_name");

                //创建一个Student对象
                Student student=new Student();
                student.setId(id);
                student.setName(name);
                student.setSno(sno);
                student.setAge(age);
                student.setGender(gender);
                student.setEnrollDate(enroll_date);
                student.setClassId(class_id);

                //创建一个班级对象
                Classes classes=new Classes();
                classes.setId(cId);
                classes.setName(cName);

                //学神对象和班级建立关系
                student.setClasses(classes);

                //把当前这个对象加入到list中
                if(list==null){
                    list=new ArrayList<>();
                }
                list.add(student);
            }
            //出了循环去返回结果
            return list;
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }finally {
            DBUtil.close(resultSet,statement,connection);
        }
    }
}
/*根据班级名去查询信息：Demo_selectStudentList*/